Nous avons maintenant notre solution de messagerie opérationnelle, mais il nous faut une interface pour lire nos mails. Il y a généralement deux solutions pour cela, soit on utilise un client de messagerie sur notre machine comme outlook, mail ou thunderbird, soit nous utilisons un webmail qui est un site web installé la plupart du temps directement sur le serveur de messagerie et qui permet de consulter ses mails en ligne, comme gmail, yahoo ou outlook.com.
Dans notre cas, nous allons opter pour la seconde solution du webmail, bien que la première puisse être aussi utilisée, mais elle nécessiterait un peu de sécurisation complémentaire pour être efficace.
Avant de pouvoir installer notre webmail, il faut déjà que l'on ait un serveur web à notre disposition. Si vous avez bien suivi le cours depuis le premier ouvrage, vous serez un pro de l'installation d'apache2. Cependant, vu que vous êtes ici pour apprendre, nous allons utiliser un autre serveur web qui est en vogue en ce moment, il s'agit de nginx (prononcer engineX, comme un moteur en anglais)
Le package pour installer nginx est... nginx !
root@Debian02:~# apt-get install nginx
Cependant, comme pour apache2, par défaut nginx n'interprète pas le PHP, il faut pour cela installer un package complémentaire qui fasse la liaison entre le serveur web et l'interpréteur PHP. Il s'agit de php-fpm. A vous de trouver la version correspondant à votre système, pour ma part il s'agit de php7.0.
root@Debian02:~# apt-get -y install php7.0-fpm
Nous pouvons vérifier si le serveur est bien en écoute :
State Recv-Q Send-Q Local Address:Port Peer Address:Port
[...]
LISTEN 0 128 *:80 *:* users:(("nginx",pid=15292,fd=6),("nginx",pid=15291,fd=6))
[...]
LISTEN 0 128 :::80 :::* users:(("nginx",pid=15292,fd=7),("nginx",pid=15291,fd=7))
[...]
Le port 80 qui correspond à notre serveur web est bien en écoute, nous pouvons donc tester notre connexion à notre serveur avec notre navigateur préféré en indiquant l'adresse IP de notre serveur :
Attention cependant, si votre machine est une machine virtuelle, il faut que vous fassiez en sorte de la rendre accessible, comme dans la quatrième partie du cours précédent "Apprenez le fonctionnement des réseaux TCP/IP"
Il nous reste à vérifier qu'il interprète correctement le PHP car le webmail que l'on souhaite installer est codé en PHP. Pour cela, il va déjà falloir indiquer à notre serveur qu'il peut prendre en compte les pages d'index en PHP. Nous allons simplement ajouter index.php comme pages par défaut, et cela se fait dans le virtualhost par défaut /etc/nginx/sites-available/default sur la ligne qui commence par index :
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
Il faut ensuite ajouter la prise en compte de PHP en dé-commentant les lignes correspondant à PHP-fpm, dans le même fichier default :
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
Il faut ensuite re-démarrer le serveur pour que les modifications soient prises en compte:
root@Debian02:~# systemctl restart nginx
Pour tester, nous allons simplement créer une nouvelle page en php à la racine du serveur.
Vous avez maintenant l'habitude, toutes les informations de base sont situées dans les fichiers de configuration, et ici notamment dans le fichier de virtualhost par défaut, nous pouvons lire :
Les pages devraient donc se trouver dans ce répertoire :
root@Debian02:/var/www/html# ls -la /var/www/html
total 3
drwxr-xr-x 4 root root 4096 avril 4 15:30 .
drwxr-xr-x 3 root root 4096 mars 29 10:58 ..
-rw-r--r-- 1 root root 612 mars 29 10:58 index.nginx-debian.html
On y retrouve bien notre page par défaut vue auparavant.
Pour tester si le PHP est bien interprété, rien de plus simple, nous allons créer une page PHP qui ne contient qu'un appel à une fonction de base :
root@Debian02:/var/www/html# vim /var/www/html/index.php
Puis y rentrer nos informations php :
phpinfo();
?>
C'est relativement simpliste !
Notre fonction phpinfo() a bien été interprétée, le PHP est donc bien installé.
Il existe aujourd'hui de nombreux webmails qui offrent chacun des fonctionnalités diverses et variées. L'avantage de notre solution est qu'elle peut fonctionner avec la plupart des webmails existants, donc si celui que nous allons installer ne vous plait pas, vous restez libre d'en installer un autre, ou même d'en installer plusieurs si vous le souhaitez !
Pour notre mise en place, j'ai choisi Rainloop. C'est un webmail très simple et performant, et il a l'avantage de ne pas nécessiter d'installation de base de données, tant que l'on ne veut pas gérer de contacts. Pour l'installation de la plupart des autres webmails, ils vous faudra créer les bases de données nécessaires à leur fonctionnement.
Dans un premier temps, vous allez devoir installer les outils nécessaires à l'installation de rainloop. Nous aurions pu faire comme dans le chapitre sur SMTP et régler les problèmes un à un au fur et à mesure que nous les rencontrions, mais je vous propose d'utiliser directement les commandes correctes afin de gagner du temps.
Il nous faut donc d'abord installer deux packages liés à PHP qui vont nous permettre par la suite d'installer facilement rainloop.
root@Debian02:~# apt-get install php-curl php-xml curl
Il nous faut ensuite créer les répertoires dans lequel rainloop va être installé, ainsi qu'un répertoire pour les logs.
root@Debian02:~# mkdir -p /var/www/rainloop/{public_html,logs}
Nous allons ensuite utiliser la commande curl pour installer rainloop vu que c'est ce qui est conseillé de faire par les développeurs de rainloop :
root@Debian02:~# cd /var/www/rainloop/public_html
root@Debian02:~# curl -sL https://repository.rainloop.net/installer.php | php
#!/usr/bin/env php
[RainLoop Webmail Installer]
* Connecting to repository ...
* Downloading package ...
* Complete downloading!
* Installing package ...
* Complete installing!
* [Success] Installation is finished!
La commande curl permet de faire une requête web et de récupérer le résultat sous forme de fichier.
Et comme vous pouvez le voir, tout s'est bien passé !
Nous allons ensuite faire en sorte que notre webmail soit visible en tant que site web, et pour cela nous allons créer spécifiquement un virtualhost.
Actuellement, la racine de notre serveur web est /var/www/html/, or nous avons installé rainloop dans /var/www/rainloop, qui est donc hors de la racine de notre serveur web. Rainloop est donc pour l'instant invisible pour notre serveur web.
Pour pouvoir le rendre accessible, nous allons créer un virtualhost spécifique qui va pointer dans notre répertoire d'installation /var/www/rainloop/public_html/
La création d'un virtualhost avec nginx est proche de la façon dont nous l'avons fait avec apache. Nous allons créer un fichier virtualhost dans le répertoire sites-available de configuration de nginx, puis nous ferons un lien dans le répertoire sites-enabled.
root@Debian02:~# vim /etc/nginx/sites-available/rainloop
Et nous allons y insérer les informations suivantes :
server_name rainloop.domaine.com;
listen 80;
root /var/www/rainloop/public_html;
access_log /var/www/rainloop/logs/access.log;
error_log /var/www/rainloop/logs/error.log;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# fastcgi_index index.php;
# fastcgi_split_path_info ^(.+\.php)(.*)$;
# fastcgi_keep_conn on;
# include /etc/nginx/fastcgi_params;
# fastcgi_pass unix:/var/run/php5-fpm.sock;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
location ^~ /data {
deny all;
}
}
Le format de notre virtualhost est le même que le fichier default. Nous indiquons un server_name qui sera à indiquer dans l'URL pour accéder à rainloop. Nous indiquons aussi où se trouve la racine de notre virtualhost, et nous activons le PHP. Enfin, nous interdisons l'accès à tout fichier de type .htaccess ou au répertoire data.
Il faut ensuite activer ce virtualhost en créant le lien dans sites-enabled :
root@Debian02:~# ln -s /etc/nginx/sites-available/rainloop /etc/nginx/sites-enabled/rainloop
Vous pouvez relancer le service nginx pour que nos modifications de configuration soient prises en compte :
root@Debian02:~# systemctl restart nginx
Mais attention ! notre virtualhost n'est pour l'instant accessible qu'avec le nom rainloop.domaine.com. Or nous ne possédons pas ce domaine.
Cependant, vous savez déjà comment procéder car nous avions rencontré le même problème dans le cours précédent quand nous avons abordé la notion de virtualhost. Vous allez pouvoir entrer ce nom dans le fichier hosts de la machine qui accède au webmail. Il faudra faire la liaison entre le nom rainloop.domaine.com et l'adresse IP de votre serveur.
Une fois que vous aurez réalisé cette manipulation, vous pourrez accéder à votre webmail, notamment pour le configurer !
Pour se connecter à la console d'administration, il faut ajouter ?admin dans l'URL, ce qui donne pour nous http://rainloop.domaine.fr/?admin
Le login/mot de passe par défaut est admin/12345.
Si tout s'est bien passé, vous voilà connecté :
La première chose que nous allons faire est de changer le mot de passe d'admin pour éviter les robots qui testent au hasard le login/mot de passe de base. Pour cela on clique dans l'encadré jaune sur change.
Une fois la rubrique "Admin Panel Access Credentials" remplie, vous pouvez valider pour changer le mot de passe. Attention, vous avez la possibilité de changer aussi le nom de l'utilisateur administrateur de rainloop, mais dans notre cas je vous conseille de garder admin. De plus, si votre serveur est accessible sur Internet, je vous invite à utiliser un mot de passe complexe.
Ensuite, nous allons passer aux éléments de configuration de notre webmail
Nous allons parcourir chacun des menus un à un.
D'abord, nous choisissons la langue dans le menu "Général" pour choisir le français (ou ce qu'il vous plaira !)
Nous allons ensuite aller dans la rubrique "Domaines" qui est très importante puisque c'est là que nous allons indiquer toutes les informations de notre serveur.
Nous commençons par ajouter un domaine, puis nous allons renseigner toutes les informations IMAP et SMTP permettant de se connecter à notre serveur :
Notre serveur est ici localhost, vu que nos serveurs IMAP et SMTP sont installés sur la même machine que notre serveur web. Il faut ensuite décocher la case "Utiliser l'authentification" vu que notre serveur SMTP a été configuré sans authentification. Vous pouvez ensuite cliquer sur "Ajouter" pour ajouter le nouveau domaine, qui apparait maintenant dans la liste des domaines :
Notre webmail est d'ors et déjà fonctionnel, mais nous allons encore ajouter quelques modifications.
Dans la rubrique "identifiant", vous pouvez indiquer le domaine itinet.fr si vous le souhaitez, vous pourrez ainsi vous connecter en indiquant seulement le nom de l'utilisateur, comme toto pour toto@itinet.fr
Dans la rubrique "Logo et marque", modifiez le titre de la page pour personnaliser ce qui s'affichera dans l'onglet, comme par exemple "Le webmail de toto", puis actualisez la page :
Enfin, le dernier point auquel vous pourrez faire attention est l'onglet "A propos" qui permet notamment de faire les mises à jour de Rainloop. Ce qui est toujours un bon réflexe pour la sécurité. Votre webmail devrait être à jour, mais voici ce que vous verrez s'il ne l'est pas :
Un simple clic sur "Mettre à jour" fera toute l'installation nécessaire.
Notre webmail est prêt, il est maintenant temps de le tester !
Pour nous connecter au webmail nous allons d'abord nous déconnecter de l'interface d'administration en cliquant en haut à droite sur le bouton de déconnexion.
Puis nous allons enlever ?admin à notre URL pour tomber à la racine de rainloop. La page de connexion n'est pas très différente :
Nous allons indiquer nos identifiants de connexion IMAP, soit toto@itinet.fr et motDePasseDeToto
Et nous voilà connectés à notre webmail !
Et nous pouvons déjà voir les premiers mails que nous avions envoyés à la main lors de nos tests SMTP. En cliquant sur les mails, on accède à leur contenu.
Vous pouvez aussi envoyer des mails à la terre entière, comme nous l'avions fait pour tester notre serveur SMTP, en cliquant sur "Nouveau"
Et si tout se passe bien, notre mail devrait être reçu par notre interlocuteur !
Attention cependant, vu que notre serveur n'est pas encore parfaitement configuré ou sécurisé, il est possible que certains serveurs de messagerie rejette un premier mail envoyé ou retarde sa réception pour lutter contre le spam, comme nous l'avions vu pour le serveur SMTP.
Voilà, nous avons une solution de messagerie complète avec :
•.Un serveur SMTP qui peut recevoir les mails pour nos adresses et en envoyer,
•.un serveur IMAP qui nous permet d'aller récupérer et lire nos mails sur le serveur,
•.et un webmail qui nous permet d'accéder à ces fonctionnalités simplement à travers une interface web.
Il y a encore beaucoup d'améliorations possibles, notamment en sécurisant notre serveur SMTP, en activant l'authentification SMTP ou en passant notre webmail en HTTPS pour en chiffrer les accès.
Cela vous laisse un champ d'exploration important, cependant, nous allons encore voir ensemble comment nous allons pouvoir simplifier l'administration de notre serveur de messagerie en automatisant une partie des tâches qu'il peut effectuer.